package com.honeymoondesert.batch;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

import org.apache.log4j.Logger;

import com.honeymoondesert.main.SingleExport;
import com.honeymoondesert.util.TranslateUrl;
import com.webapp.dao.StoreDao;
import com.webapp.entity.Store;
import com.webapp.spring.SpringHelper;

public class BatchCrawler {
	//日志
	Logger log=Logger.getLogger(this.getClass());
	
	String beforeDate;
	int poolSize=2;
	List<Store> storeList;
	
	public BatchCrawler(String beforeDate){
		this.beforeDate=beforeDate;
	}
	public BatchCrawler(String beforeDate,List<Store> storeList){
		this.beforeDate=beforeDate;
		this.storeList=storeList;
	}
	private void getStoreList(){
		StoreDao storeDao=(StoreDao)SpringHelper.getBean("storeDao");
		storeList=storeDao.loadAll();
	}
//	public void getSpecStoreList(){
//		storeList=new ArrayList<Store>();
//		Store store=new Store();
//		store.setDpId("5101466");
//		storeList.add(store);
//		Store store0=new Store();
//		store0.setDpId("20766655");
//		storeList.add(store0);
//		Store store1=new Store();
//		store1.setDpId("22066769");
//		storeList.add(store1);
//		Store store2=new Store();
//		store2.setDpId("22358422");
//		storeList.add(store2);
//		Store store3=new Store();
//		store3.setDpId("20890335");
//		storeList.add(store3);
//		Store store4=new Store();
//		store4.setDpId("9513460");
//		storeList.add(store4);
//		Store store5=new Store();
//		store5.setDpId("5990810");
//		storeList.add(store5);
//		Store store6=new Store();
//		store6.setDpId("5502522");
//		storeList.add(store6);
//	}
	public void batchCrawl(){
		if(storeList==null)getStoreList();
		Date beginDate = new Date();
		log.info("开始爬虫任务----"+beginDate);
		List<Thread> tList=new ArrayList<Thread>();
		//创建一个可重用固定线程数的线程池
        ExecutorService exePool = Executors.newFixedThreadPool(poolSize);
        //创建实现了Runnable接口对象，Thread对象当然也实现了Runnable接口
        for (Store store : storeList) {
			String dpId=store.getDpId();
			final String storeUrl=TranslateUrl.getUrl("/shop/"+dpId);
			Thread t=new Thread(){
				public void run(){
					SingleExport se=new SingleExport(storeUrl);
					se.exportAllInfo(beforeDate);
				}
			};
			tList.add(t);
			
		}
		//将线程放入池中进行执行
        for (Thread thread : tList) {
//        	exePool.execute(thread);	//线程池
        	thread.run();	//单线程
		}
        //关闭线程池
        log.debug("关闭线程池");
        exePool.shutdown();
        while (!exePool.isTerminated()) {

		}
        Date endDate = new Date();
        long needTime = (endDate.getTime()-beginDate.getTime())/1000/60;
        log.info("任务完成----"+endDate);
        log.info("耗时:"+needTime+"min");
	}
	
}
